10783
21625
Geschlossen. Diese Frage erfordert Details oder Klarheit. Derzeit werden keine Antworten akzeptiert.
Möchten Sie diese Frage verbessern? Fügen Sie Details hinzu und klären Sie das Problem, indem Sie diesen Beitrag bearbeiten.
Vor 1 Jahr geschlossen.
Verbessere diese Frage
Ich mache eine Code-Herausforderung und möchte die ersten 3 Werte aus meinem Array abrufen, indem ich den Startindex spezifiziere und nur die ersten (3 oder beliebig langen) Werte aus dem Startindex abrufe.
Ich habe diesen Code ausprobiert und er funktioniert, aber die Codestruktur ist zu lang. Wie kann ich ihn kürzer machen, damit er leicht zu verstehen ist?
int n = 10;
doppelte Signatur = neues doppeltes [] {1, 1, 1};
double [] ret = new double [n];
Doppelsumme = 0;
ret [0] = Signatur [0];
ret [1] = Signatur [1];
ret [2] = Signatur [2];
int x, i;
für (i = 0; i 
                                
Mit LINQ können Sie Folgendes ausprobieren:
var values ​​= array.Skip (Index)
Nehmen Sie (n)
.ToArray ();
Dabei ist index der Index des ersten Elements und n die Anzahl der Elemente, die Sie auswählen möchten.
Z.B. https://dotnetfiddle.net/Pk1rwY
Als Anmerkung. Die Verwendung von LINQ bedeutet nicht, dass Ihr Code schneller wäre. Es wäre kompakter / lesbarer usw. Um beurteilen zu können, wie leistungsfähig Ihr Code ist, müssen Sie so etwas wie BenchmarkDotNet verwenden.
|
Keine Linq-Lösung:
private statische T [] Extrahieren Sie  (T [] Quelle, int fromIndex, int Länge) {
if (null == source)
neue ArgumentNullException auslösen (nameof (source));
sonst wenn (fromIndex <0)
werfen Sie eine neue ArgumentOutOfRangeException (nameof (fromIndex),
"From Index darf nicht negativ sein");
sonst wenn (Länge <0)
neue ArgumentOutOfRangeException auslösen (nameof (Länge),
"Länge darf nicht negativ sein");
if (fromIndex> = source.Length || length == 0)
neues T zurückgeben [0];
T [] Ergebnis = neues T [Math.Min (Länge, Quelle.Länge - fromIndex)];
Array.Copy (source, fromIndex, result, 0, result.Length);
Ergebnis zurückgeben;
}}
Dann
double [] Signatur = new double [] {0, 1, 2, 3, 4, 5};
double [] ret = Extract (Signatur, 3, 2);
Console.Write (string.Join (",", ret));
Ergebnis:
3, 4
|
Aus Ihrer Frage müssen Sie die Operatoren .Take und .Skip nutzen.
var result = array.Skip (StartingIndex) .Take (numberOfElements);
Aus Ihrem Code geht hervor, dass Sie versuchen, etwas anderes zu tun, nämlich Elemente zu summieren. Der Operator .Sum kann hier hilfreich sein.
|
Nicht die Antwort, die Sie suchen? Durchsuchen Sie andere Fragen mit dem Tag c # arrays linq oder stellen Sie Ihre eigene Frage.